import {  RequestConfig, history } from 'umi';
import { getCookie,  } from './utils/auth';
import { message } from 'antd'


const baseURL = 'http://111.203.59.61:8060/dev-api';
const errorCode = {
  '400': 'Bad Request',
  '401': 'Unauthorized',
  '403': 'Forbidden',
  '404': 'Not Found',
  '500': 'Internal Server Error',
  '502': "Bad GetWay",
  '503': 'Service Unavailable'
}


export const request: RequestConfig = {
  timeout: 100000, //设置请求超时时间
  errorConfig: {},
  middlewares: [],
  // 请求拦截器
  requestInterceptors: [(url:any, options:any) => { //请求拦截器是一个数组，第一个参数是一个函数，接收两个参数，当前请求的url和options信息
    const authorization = getCookie() as string;
    if (!/http/.test(url)) {  //如果url里面不包含http
      url = baseURL + url; //那就在url之前拼接上基础路径
    }
    let headers = options.headers;  //获取请求头信息
    if (authorization){  //如果拿到了登录态，就把登录态写入请求头
      headers = { ...headers, authorization }
    }
    return { //请求拦截器返回一个对象，有两个属性，url和option .以下相当于把url和options都设置成了新的
      url,
      options: { ...options, interceptors: true, headers },  //interceptors 表示是否开启拦截器
    };
  }],
  // 响应拦截器
  responseInterceptors: [async (response:any, options:any) => { ///响应拦截器是一个数组，第一个参数是一个异步函数，接收两个参数，当前响应的信息和options信息
    let data = { code: 200, msg: '' };
    try {
      data = await response.clone().json(); //获得响应的业务提示信息
      // 处理网络错误
      if (response.status !== 200) {
        message.error(response.statusText);  // message 是antd 的一个全局提示信息 插件
        return response;  //操作完以后返回response
      }

      // 处理业务错误
      if (data.code !== 200) {
        message.error(data.msg);
        return response;
      }
    } catch (e) {
      message.error(e.message);
      return response;
    }
    return response;
  }],

} ;
// 导航守卫
const whiteList = ['/login', '/403', '/404'];
export function onRouteChange({location, matchedRoutes }: any) {
  const authorization = getCookie() as string;
  if (matchedRoutes.length) {
    document.title = matchedRoutes[matchedRoutes.length - 1].route.title || '';
  }
  // 登陆态拦截
  if (!authorization){ //如果没有登录态
    if (whiteList.indexOf(location.pathname) == -1) { //并且不在白名单范围之内
      //跳转到登录页，并且在url上拼接参数，这个参数代表跳转到登录页之前
      //登录成功之后，要拿到这个参数，回跳回去
      history.replace(`/login?redirect=${encodeURIComponent(location.pathname)}`) 
    }
  }
}

// 把首页重定向到/teachers/postSkill
if(location.pathname==='/'){
  history.replace('/teachers/postSkill')
}
if(location.pathname==='/'){
  history.replace('/login')
}
